package org.lc.stk.service.question;

import java.util.Optional;

import org.lc.stk.model.question.Question;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

/**
 * 试题服务接口
 */
import org.lc.stk.web.dto.question.QuestionResponseDTO;

public interface QuestionService<T extends QuestionResponseDTO> {
    
    // 基本CRUD操作
    Optional<T> getQuestionById(Long id);
    void deleteQuestion(Long id);
    Page<T> listQuestions(Pageable pageable);
    T updateQuestionState(Long id, String state);
    boolean existsById(Long id);
    T createQuestion(T dto);
    T updateQuestion(Long id, T dto);
    
    // 通用转换方法
    T toDTO(Long questionId);
    
    // 通用验证方法
    boolean validate(T dto);
    
    // 版本控制
    Long getVersion(Long id);
    
    // 审计日志
    void logOperation(Long id, String operationType);
    
    // 状态检查
    boolean isPublished(Long id);
    boolean isArchived(Long id);
}